範例 XML 檔案格式內容如下,想抓 XML 幾個欄位的資料寫入 table 中,SQL 語法如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 函 SYSTEM "104_2_utf8.dtd" [
<!ENTITY 表單 SYSTEM "0001132A00.sw" NDATA DI>
<!NOTATION DI SYSTEM "">
<!NOTATION _X SYSTEM "">
]>
<函>
<發文機關>
<全銜>財團法人中華民國xxx基金會</全銜>
<機關代碼>XC12345678</機關代碼>
</發文機關>
<函類別 代碼="函"/>
<地址>10066臺北市中正區南海路x號x樓</地址>
<聯絡方式>承辦人:XXX</聯絡方式>
<聯絡方式>電話:02-12345678分機123</聯絡方式>
<聯絡方式>電子信箱:XXX@sfi.org.tw</聯絡方式>
<受文者>
<交換表 交換表單="表單">如正副本行文單位</交換表>
</受文者>
<發文日期>
<年月日>中華民國109年9月8日</年月日>
</發文日期>
<發文字號>
<字>證基</字>
<文號>
<年度>109</年度>
<流水號>1234567</流水號>
</文號>
</發文字號>
<速別 代碼="普通件"/>
<密等及解密條件或保密期限>
<密等/>
<解密條件或保密期限></解密條件或保密期限>
</密等及解密條件或保密期限>
<附件>
<文字>無</文字>
</附件>
<主旨>
<文字>臺灣xxx交易所委託本基金會辦理「上市櫃公司xxx研討會」,敬邀貴公司董事、監察人、公司治理主管與高階主管參加,請查照。</文字>
</主旨>
<段落 段名="說明:">
<文字></文字>
<條列 序號="一、">
<文字>為協助上市櫃公司如何有效運用衍生性商品避險以因應系統性風險、匯率風險及原物料成本波動風險等,使企業高層了解衍生性商品避險交易之重要。臺灣期貨交易所委託本基金會辦理本活動,全程參與之董監事及公司治理主管於活動結束後提供進修時數認證,每家上市上櫃及興櫃公司至多得報名三位。</文字>
</條列>
<條列 序號="二、">
<文字>辦理時間地點如下:</文字>
<條列 序號="(一)">
<文字>時間:109年10月10日(週三)下午2時</文字>
</條列>
<條列 序號="(二)">
<文字>地點:xxx會議中心感恩廳(台北市忠孝東路x段x號x樓,台北市忠孝東路與建國南路交叉口-xx大樓x樓)</文字>
</條列>
</條列>
<條列 序號="三、">
<文字>本活動請至本基會網站(https://www.xxx.org.tw)報名,額滿為止,敬請踴躍報名參加。</文字>
</條列>
</段落>
<正本>
<全銜>上市上櫃公司(含興櫃)</全銜>
</正本>
<副本>
<全銜>臺灣xx股份有限公司</全銜>
</副本>
</函>
--新增要將 XML 讀到資料寫入用的 table
CREATE TABLE [dbo].[OD](
[ODid] [nvarchar](20) NOT NULL,
[ODdate] [nvarchar](20) NULL,
[ODgov] [nvarchar](50) NULL,
[ODtopic] [nvarchar](100) NULL,
CONSTRAINT [PK_OD] PRIMARY KEY CLUSTERED
(
[ODid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
--讀取 XML 檔寫入 MSSQL table
insert into OD ( ODid, ODdate, ODgov, ODtopic )
select
ODid.文號.query('年度').value('.', 'VARCHAR(20)') + ODid.文號.query('流水號').value('.', 'VARCHAR(20)') + ODid.文號.query('支號').value('.', 'VARCHAR(20)'),
ODdate.發文日期.query('年月日').value('.', 'VARCHAR(20)'),
ODgov.發文機關.query('全銜').value('.', 'VARCHAR(50)'),
ODtopic.主旨.query('文字').value('.', 'VARCHAR(100)')
from (select CONVERT(XML, MY_XML, 2)
from OPENROWSET(BULK 'C:\test.xml', SINGLE_BLOB) as T(MY_XML)) as T(MY_XML)
cross apply MY_XML.nodes('函/發文字號/文號') as ODid (文號)
cross apply MY_XML.nodes('函/發文日期') as ODdate (發文日期)
cross apply MY_XML.nodes('函/發文機關') as ODgov (發文機關)
cross apply MY_XML.nodes('函/主旨') as ODtopic (主旨);